/*
 *         Copyright (c) KUBOTA Corporation and HUDSON SOFT,
 *                  1994, 1995 All Rights Reserved
 *
 *  This software comprises unpublished confidential information of
 *  KUBOTA Corp. and HUDSON SOFT. It may not be used, copied or made 
 *  available to anyone, except in accordance with the license under
 *  which it is furnished.
 */
static char SccsId[] = "@(#)adfix.c	1.3 9/19/95";
#include <farl.h>
#include <agl.h>

/*
 * オブジェクトデータ設定終了。計算後のマトリクスの退避を行う。
 */

void
AGLFixObj(object *obj)
{
     register unsigned long	cnt;
     fix1015	lnrm[3];

     /*
      * カメラの状態が変化していた時は、カメラマトリクスを{Obj|Nrm}Matrixへ
      * コピーする
      * camChanged == 1	 187, 1015マトリクス共に変更されている
      * camChanged == -1 187マトリクスのみ変更されている
      * camChanged == -2 カメラのリセットのみ行われている
      */
     if (__AGLCamera.camChanged == 1 || __AGLCamera.camChanged == -1) {
	       FarlMatrixCopy4x4((unsigned short*)obj->objMatrix,
				    (unsigned short*)__AGLCamera.camMatrix187);
	  if (__AGLCamera.camChanged == 1) {
	       FarlMatrixCopy3x3((unsigned short*)obj->nrmMatrix,
	       			(unsigned short*)__AGLCamera.camMatrix1015);
	  } else {
	       AGLSetUnitMatrix3((fix1015*)obj->nrmMatrix);
	  }
     } else if (__AGLCamera.camChanged == -2) {
	  AGLSetUnitMatrix4((fix187*)obj->objMatrix);
	  AGLSetUnitMatrix3((fix1015*)obj->nrmMatrix);
     }

     /*
      * この段階で objChanged < 0 だった場合、
      * 初期設定が必要なobjToWorldマトリクスは初期化する。
      */
     if (obj->objChanged < 0) {
	  AGLSetUnitMatrix3((fix1015*)obj->objToWorld1015);
	  if (obj->objChanged == -2)
	       AGLSetUnitMatrix4((fix187*)obj->objToWorld187);
	  obj->objChanged = 1;
     }
}
